/*
 * Tencent is pleased to support the open source community by making KuiklyUI
 * available.
 * Copyright (C) 2025 THL A29 Limited, a Tencent company. All rights reserved.
 * Licensed under the License of KuiklyUI;
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * https://github.com/Tencent-TDS/KuiklyUI/blob/main/LICENSE
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#import <Foundation/Foundation.h>
#import "KRPerformanceDataProtocol.h"

NS_ASSUME_NONNULL_BEGIN

typedef NS_OPTIONS(int, KRPageState) {
    KRPageState_viewDidLoad = 1 << 0,
    KRPageState_viewDidAppear = 1 << 1,
    KRPageState_appActive = 1 << 2,
};

@interface KRPerformanceManager : NSObject <KRPerformanceDataProtocol>

@property (nonatomic, assign) KRPageState pageState;
@property (nonatomic, assign) KRMonitorType monitorType;

/// key stage, value timespam（单位毫秒）
@property (nonatomic, readonly) NSDictionary<NSNumber *, NSNumber *> *stageStartTimes;
/// key stage, value durations（单位毫秒）
@property (nonatomic, readonly) NSDictionary<NSNumber *, NSNumber *> *stageDurations;

- (instancetype)initWithPageName:(NSString *)pageName;

/// 打点记时
- (void)startStage:(KRLoadStage)stage;
- (void)endStage:(KRLoadStage)stage;

- (void)startMonitor;
- (void)endMonitor;

- (void)mergeKotlinCreatePageTime:(NSDictionary *)params;

@end

NS_ASSUME_NONNULL_END
